import Vuex from 'vuex'
import Vue from 'vue'

//vue加载Vuex插件需要配置在index.js中,这样main.js 导入的时候就能保证使用插件的顺序先于vuex 的store对象初始化
Vue.use(Vuex)

//定义actions对象，该层类似于MVC中的Controller层和Service层，接收对应的请求并且执行一系列的业务逻辑
const actions = {
   jia(context,value){
        context.commit('JIA',value)
   },
   jian(context,value){
      context.commit('JIA',-value)
   },
   jiaWhenOdd(context,value){
      let num = context.state.num
      if(num & 1 == 1){
         context.commit('JIA',value)
      }
   },
   jiaDelay(context,value){
      setTimeout(() => {
         context.commit('JIA',value)
      }, 500);
   }
}

// 类似于vue中的computed属性
const getters = {
    bigNum(state){
      return state.num * 10;
    }
}

//定义mutations对象，该层类似于MVC中的dao层，直接对存储的数据进行操作
const mutations = {
  JIA(state,value){
     state.num += value
  }
}
//定义state对象，该层类似于MVC中的Model层，存储数据
const state = {
   num: 0
}

export default new Vuex.Store({
    actions,
    mutations,
    state,
    getters
})